package componentes;

import java.awt.Color;
import java.awt.Graphics;

/**
 * 
 * Classe Aviao.java que representa o avião que se movimentará de forma senoidal
 * 
 * @desc Projeto BombarJ
 * @author Simone Carneiro Streitenberger 11888 CCO2003
 * @author Thiago Nascimento Comicio 11889 CCO2003
 * @professor Edison de Jesus
 * @disciplina Computação Gráfica 2 - CCO812
 * 
 */
public class Aviao {

	// pontos que constroem o polígono representando o avião
	private int x[], xi[];

	private int y[], yi[];

	// variáveis relacionadas ao bico do avião
	private int arcX, arcXi;

	private int arcY, arcYi;

	private int arcW;

	private int arcH;

	// pontos que servem para deslocar o avião em relação ao seu centro
	private Ponto inicio, central;

	/**
	 * 
	 * Construtor da classe Aviao.java
	 * 
	 * @param inicio
	 *            Ponto inicial do centro do avião na tela.
	 * 
	 */
	public Aviao(Ponto inicio) {

		// seta os pontos centrais
		this.inicio = new Ponto(inicio);
		this.central = new Ponto(inicio);

		// posições com o centro
		int x[] = { -29, -25, -20, -2, 10, 16, 14, 17, 15, 13, 11, 17, 15, 10,
				9, 25, 25, 5, 2, 6, 5, 0, -3, 0, -1, -5, -9, -15, -7, -18, -25 };
		int y[] = { -11, -11, -4, -4, -12, -12, -9, -9, -8, -8, -7, -7, -6, -6,
				-4, -4, 3, 3, 5, 5, 6, 6, 8, 8, 9, 9, 12, 12, 3, 3, 0 };

		// seta as posições conforme o ponto inicial passado pelo controle
		for (int i = 0; i < x.length; i++) {
			x[i] += inicio.getX();
			y[i] += inicio.getY();
		}

		// seta as posições do bico do avião em relação ao ponto inicial passado
		this.arcX = this.arcXi = 22 + inicio.getX();
		this.arcY = this.arcYi = -4 + inicio.getY();
		this.arcW = 6;
		this.arcH = 7;

		// seta as posições iniciais do avião que serão usados no deslocamento
		this.xi = x;
		this.yi = y;

		this.x = new int[this.xi.length];
		this.y = new int[this.yi.length];

		for (int i = 0; i < this.xi.length; i++) {
			this.x[i] = this.xi[i];
			this.y[i] = this.yi[i];
		}

	}

	/**
	 * 
	 * 
	 * Método que tem por função pintar o avião na tela
	 * 
	 * @param desenho
	 *            Objeto do painel onde será pintado o projétil.
	 * 
	 */
	public void pintaAviao(Graphics desenho) {

		// verifica se o objeto gráfico existe
		if (desenho == null)
			return;

		// seta a cor do avião como sendo preta
		desenho.setColor(Color.BLACK);

		// constrói o corpo do avião
		desenho.fillPolygon(x, y, x.length);

		// constrói o bico do avião
		desenho.fillArc(arcX, arcY, arcW, arcH, 0, 360);

	}

	/**
	 * 
	 * Método que tem por função deslocar o acião em relação a sua posição
	 * anterior.
	 * 
	 * @param x
	 *            Quantidade de pixels a serem deslocados horizontalmente.
	 * @param y
	 *            Quantidade de pixels a serem deslocados verticalmente.
	 * 
	 */
	public void desloca(int x, int y) {
		// deslocando os pontos do polígono do corpo do avião
		for (int i = 0; i < this.x.length; i++) {
			this.x[i] += x;
			this.y[i] += y;
		}

		// modificando o ponto central do avião
		central.setX(central.getX() + x);
		central.setY(central.getY() + y);

		// modificando o bico do avião
		arcX += x;
		arcY += y;
	}

	/**
	 * 
	 * Método que tem por função setar uma nova posição em relação a posição
	 * inicial.
	 * 
	 * @param x
	 *            Quantidade de pixels a serem deslocados horizontalmente em
	 *            relação a posição inicial.
	 * @param y
	 *            Quantidade de pixels a serem deslocados verticalmente em
	 *            relação a posição inicial.
	 * 
	 */
	public void setPosicao(int x, int y) {
		// deslocando os pontos do polígono do corpo do avião
		for (int i = 0; i < this.x.length; i++) {
			this.x[i] = this.xi[i] + x;
			this.y[i] = this.yi[i] + y;
		}

		// modificando o ponto central do avião
		central.setX(inicio.getX() + x);
		central.setY(inicio.getY() + y);

		// modificando o bico do avião
		arcX = arcXi + x;
		arcY = arcYi + y;
	}

	/**
	 * 
	 * Método que tem por função retornar o ponto central do avião.
	 * 
	 * @return O ponto central do avião.
	 * 
	 */
	public Ponto getPosicaoCentroRelOrigem() {
		return central;
	}

	/**
	 * 
	 * Método que tem por função retornar o ponto central inicial do avião.
	 * 
	 * @return O ponto central inicial do avião.
	 * 
	 */
	public Ponto getOrigem() {
		return inicio;
	}

}
